本文记录了Pubeasy Android SDK 的变更情况。
发版日期:2024/11/10
发版日期:2024/11/06
我们的海外广告 SDK 旨在为开发者提供一种简便的方式来在其应用程序中展示广告,并从中获利。SDK 支持多种广告格式,包括横幅广告、插页广告、激励视频广告等。
本文介绍 SDK 的集成方式和具体步骤。
加入依赖
x// 仓库地址
maven {
url "https://maven.pubeasy.io/repository/maven-public/"
}
// sdk aar
implementation 'com.zy:pubeasy:2.0.3'
开启了资源混淆 请keep Pubeasy的资源文件,Pubeasy的资源都是以 Pubeasy_ 为 前缀
xxxxxxxxxx
-keepresources res/**/pubeasy*
需要开启硬件加速
xxxxxxxxxx
<application
android:hardwareAccelerated="true"
>
混淆配置
xxxxxxxxxx
-keep class com.zy.pubeasy.** {*;}
建议在Application里初始化
初始化回调可能会在子线程
xxxxxxxxxx
Pubeasy.getInstance().init(this,new Pubeasy.InitListener() {
public void onInitSuccess() {
// 初始化成功 可能为子线程
}
public void onInitFailed(String msg) {
// 初始化失败 可能为子线程
}
});
广告请求参数实体
方法 | 参数 | 说明 |
---|---|---|
void setPosId(String posId); | - | 广告位id |
void setHeight(int h); | - | 高 单位px |
void setWidth(int w) | - | 宽 单位px |
广告详情,可以获取价格
方法 | 参数 | 说明 |
---|---|---|
Double getPrice() | - | 获取广告价格,需要在load完成之后获取 |
错误信息
方法 | 参数 | 说明 |
---|---|---|
Int getCode() | - | 错误码 |
String getMessage(); | - | 错误信息 |
横幅
Banner广告请求类
方法 | 参数 | 说明 |
---|---|---|
public void loadAd(PAdSlot adSlot, PBannerAdLoadListener loadListener) | -PAdSlot-CBannerAdLoadListener | 发起广告请求 |
Banner 广告加载监听
方法 | 参数 | 说明 |
---|---|---|
void onAdLoaded(PubeasyBannerView bannerView); | -PubeasyBannerView | |
void onAdFailedToLoad(PAdError error); | -PAdError |
Banner 广告行为监听
方法 | 参数 | 说明 |
---|---|---|
void onAdDisplayFailed(PAdError adError); | -PAdError | 广告展示失败 |
void onAdDisplayed(PAdError error); | -PAdError | 广告展示 |
void onAdClicked(PAdError error); | -PAdError | 广告点击 |
Banner 广告View
方法 | 参数 | 说明 |
---|---|---|
void notifyBidWin(price); | double | 价格 |
xxxxxxxxxx
PAdSlot adSlot = new PAdSlot.Builder()
.setPosId("PP7433Z65FCF4B1E")
.setHeight(50)
.setWidth(320)
.build();
PubeasyBannerAd pubeasyBannerAd = new PubeasyBannerAd();
pubeasyBannerAd .loadAd(adSlot, new CBannerAdLoadListener() {
public void onAdLoaded(PubeasyBannerView bannerView) {
Toast.makeText(Pubeasy.getInstance().getContext(), "banner ready ,price : " + bannerView.getPrice(), Toast.LENGTH_SHORT).show();
// 通知竟胜
double price = bannerView.getPrice();
bannerView.notifyBidWin(price);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(bannerWidth, bannerHeight);
layoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
layoutParams.bottomMargin = 50;
bannerView.setAdListener(new CBannerAdListener() {
public void onAdDisplayFailed(PAdError adError) {
Toast.makeText(Pubeasy.getInstance().getContext(), "banner onAdDisplayFailed " + adError.getMessage(), Toast.LENGTH_SHORT).show();
}
public void onAdDisplayed(PAdInfo adInfo) {
Toast.makeText(Pubeasy.getInstance().getContext(), "banner onAdDisplayed " + adInfo.getPrice(), Toast.LENGTH_SHORT).show();
}
public void onAdClicked(PAdInfo adInfo) {
Toast.makeText(Pubeasy.getInstance().getContext(), "banner onAdClicked " + adInfo.getPrice(), Toast.LENGTH_SHORT).show();
}
});
decorView.addView(bannerView, layoutParams);
}
public void onAdFailedToLoad(PAdError error) {
Toast.makeText(Pubeasy.getInstance().getContext(), "banner error " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
信息流
native广告请求类
方法 | 参数 | 说明 |
---|---|---|
public void loadAd(PAdSlot adSlot, PNativeAdLoadListener loadListener) | -PAdSlot-PNativeAdLoadListener | 发起广告请求 |
广告加载监听
方法 | 参数 | 说明 |
---|---|---|
void onAdLoaded(PAdInfo adInfo, PNativeAd nativeAd); | -PAdInfo -PNativeAd | |
void onAdFailedToLoad(PAdError error); | -PAdError |
广告行为监听
方法 | 参数 | 说明 |
---|---|---|
void onAdDisplayFailed(PAdError adError); | -PAdError | 广告展示失败 |
void onAdDisplayed(PAdError error); | -PAdError | 广告展示 |
void onAdClicked(PAdError error); | -PAdError | 广告点击 |
素材信息类
方法 | 参数 | 说明 |
---|---|---|
public String getTitle() | - | Ad Title |
public String getDesc() | - | Ad Desc |
public String getButtonText() | - | 点击按钮描述 比如 Install |
public CImg getIcon() | - | Icon |
public PubeasyMediaView getMediaView() | - | 媒体View 为图片or视频 |
public int getMediaWidth() | - | 媒体View 原始宽 |
public int getMediaHeight() | - | 媒体View 原始高 |
public Bitmap getLogo() | - | Pubeasy Logo |
void notifyBidWin(price); | double | 价格 |
public void registerViewForInteraction(PubeasyMediaView nativeAdView, List<View> clickableViews, PNativeAdListener nativeAdListener) | -PubeasyMediaView -List<View> -PNativeAdListener | (重要)广告行为注册,和计费有关,必须实现。 |
xxxxxxxxxx
public void loadAd(View view) {
PubeasyNativeAd PubeasyNativeAd = new PubeasyNativeAd();
PAdSlot adSlot = new PAdSlot.Builder()
.setWidth(1200)
.setHeight(627)
.setPosId("PHQXIRM661256337")
.build();
PubeasyNativeAd.loadAd(adSlot, new PNativeAdLoadListener() {
public void onAdLoaded(PAdInfo adInfo, PNativeAd nativeAd) {
ScreenUtils.showToast("onAdLoaded");
mNativeAd = nativeAd;
mNativeAd.notifyBidWin(adInfo.getPrice());
// 具体的素材拼接 Demo里有 单独展示 和 RecycleView 的展示demo
}
public void onAdFailedToLoad(PAdError errorCode) {
Log.d(TAG, "onAdFailedToLoad() called with: errorCode = [" + errorCode + "]");
ScreenUtils.showToast("errorCode " + errorCode.getMessage());
}
});
}
激励视频。
激励视频广告请求类
方法 | 参数 | 说明 |
---|---|---|
public void loadRewardedAd(PAdSlot adSlot, PRewardAdLoadListener loadListener) | -PAdSlot-PRewardAdLoadListener | 发起广告请求 |
public boolean isReady() | - | True 广告加载完成False 广告未加载 |
public void show(Context context) | -Context | 展示广告,context 可以是Activity or Application |
public void destroy() | - | 销毁广告 |
void setRewardedAdListener(PubeasyRewardAdListener rewardedAdShowListener) | -PubeasyRewardAdListener | 设置广告事件监听 |
Void notifyBidWin(PAdInfo.getPrice()); | -double | 当竞胜时调用 |
Void setMute(isMute()) | bool | 视频是否静音,true 静音false 不静音 |
广告加载监听
方法 | 参数 | 说明 |
---|---|---|
void onAdLoaded(PAdInfo PAdInfo); | -PAdInfo | 广告load成功 |
void onAdFailedToLoad(PAdError error); | -PAdError | 广告load 失败 |
广告事件监听
方法 | 参数 | 说明 |
---|---|---|
void onAdDisplayFailed(PAdError adError); | -PAdError | 广告展示失败 |
void onAdDisplayed(PAdError error); | -PAdError | 广告展示 |
void onAdClicked(PAdError error); | -PAdError | 广告点击 |
void onAdDismissed(); | - | 广告关闭 |
void onVideoStart(); | - | 视频开始播放 |
void onVideoComplete(); | - | 视频结束播放 |
void onUserRewarded(PRewardInfo rewardInfo); | -PRewardInfo | 触发奖励回调 |
奖励回调信息
方法 | 参数 | 说明 |
---|---|---|
String getRewardInfo() | - | 获取奖励信息 |
xxxxxxxxxx
pubeasyRewardedAd = new PubeasyRewardedAd();
pubeasyRewardedAd .loadRewardedAd(new PAdSlot.Builder().setPosId("12345").build(), new PRewardAdLoadListener() {
public void onAdLoaded(PAdInfo PAdInfo) {
pubeasyRewardedAd .notifyBidWin(PAdInfo.getPrice());
appendText( "onAdLoaded: ");
}
public void onAdFailedToLoad(PAdError errorCode) {
appendText( "onAdFailedToLoad: "+errorCode.getMessage());
}
});
pubeasyRewardedAd.setRewardedAdListener(new PubeasyRewardAdListener() {
public void onAdDisplayFailed(PAdError adError) {
appendText( "onAdDisplayFailed: "+adError.getMessage());
}
public void onAdDisplayed(PAdInfo adInfo) {
appendText( "onAdDisplayed: "+adInfo.getCid());
}
public void onAdClicked(PAdInfo adInfo) {
appendText( "onAdClicked: "+adInfo.getCid());
}
public void onAdDismissed() {
appendText( "onAdDismissed: ");
}
public void onVideoStart() {
appendText( "onVideoStart: ");
}
public void onVideoComplete() {
appendText( "onVideoComplete: ");
}
public void onUserRewarded(PRewardInfo rewardInfo) {
appendText( "onUserRewarded: "+rewardInfo.getRewardInfo());
}
});
pubeasyRewardedAd.show(this);
插屏视频
插屏视频广告请求类
方法 | 参数 | 说明 |
---|---|---|
public void loadInterstitialAd(PAdSlot adSlot, PInterstitialAdLoadListener loadListener) | -PAdSlot-PInterstitialAdLoadListener | 发起广告请求 |
public boolean isReady() | - | True 广告加载完成False 广告未加载 |
public void show(Context context) | -Context | 展示广告,context 可以是Activity or Application |
public void destroy() | - | 销毁广告 |
Void notifyBidWin(pAdInfo.getPrice()); | -double | 当竞胜时调用 |
Void setMute(isMute()) | bool | 视频是否静音,true 静音false 不静音 |
广告加载监听
方法 | 参数 | 说明 |
---|---|---|
void onAdLoaded(PAdInfo PAdInfo); | -PAdInfo | 广告load成功 |
void onAdFailedToLoad(PAdError error); | -PAdError | 广告load 失败 |
广告事件监听
方法 | 参数 | 说明 |
---|---|---|
void onAdDisplayFailed(PAdError adError); | -PAdError | 广告展示失败 |
void onAdDisplayed(PAdError error); | -PAdError | 广告展示 |
void onAdClicked(PAdError error); | -PAdError | 广告点击 |
void onAdDismissed(); | - | 广告关闭 |
void onVideoStart(); | - | 视频开始播放 |
void onVideoComplete(); | - | 视频结束播放 |
xxxxxxxxxx
PubeasyInterstitialAd pubeasyInterstitialAd = new PubeasyInterstitialAd();
pubeasyInterstitialAd .loadInterstitialAd(new PAdSlot.Builder()
.setPosId("123456")
.build(), new PInterstitialAdLoadListener() {
public void onAdLoaded(PAdInfo PAdInfo) {
PubeasyInterstitialAd.notifyBidWin(PAdInfo.getPrice());
appendText("onAdLoaded");
}
public void onAdFailedToLoad(PAdError errorCode) {
appendText("onAdFailedToLoad: " + errorCode.getMessage());
}
});
pubeasyInterstitialAd .setInterstitialAdListener(new PubeasyInterstitialAdListener() {
public void onVideoStart() {
appendText("onVideoStart");
}
public void onVideoComplete() {
appendText("onVideoComplete");
}
public void onAdDisplayFailed(PAdError adError) {
appendText("onAdDisplayFailed: " + adError.getMessage());
}
public void onAdDisplayed(PAdInfo adInfo) {
appendText("onAdDisplayed: " + adInfo.getCid());
}
public void onAdClicked(PAdInfo adInfo) {
appendText("onAdClicked: " + adInfo.getCid());
}
public void onAdDismissed() {
appendText("onAdDismissed");
}
});
pubeasyInterstitialAd.show(this);
如果有隐私合规的需求,在sdk初始化之前设置,当地域定位成功时,初始化sdk。
xxxxxxxxxx
// A3IFG1365FCF473C = APPID
Pubeasyy.getInstance().fetchArea(this,"A3IFG1365FCF473C", new PubeasyAreaListener() {
public void onAreaSuccess(boolean isCA, boolean isEU, boolean isCOPPA, boolean isLGPD) {
// 加州
if (isCA) {
Pubeasy.getInstance().setCCPAConsent(getApplicationContext(), Pubeasy.PRIVACY_OFF);
}
// 欧盟
if (isEU) {
Pubeasy.getInstance().setGDPRConsent(getApplicationContext(), Pubeasy.PRIVACY_OFF);
}
// US
if (isCOPPA) {
Pubeasy.getInstance().setCOPPAConsent(getApplicationContext(), Pubeasy.PRIVACY_OFF);
}
// 巴西
if (isLGPD) {
Pubeasy.getInstance().setLGPDConsent(getApplicationContext(), Pubeasy.PRIVACY_OFF);
}
// 获取当前国家
String currentConsent = Pubeasy.getInstance().getCurrentConsent(getApplicationContext());
Log.d(TAG, "onAreaSuccess: "+currentConsent);
}
public void onAreaFailed(String error) {
Log.e(TAG, "onAreaFailed: "+error);
}
});
错误码 | 错误信息 | 说明 |
---|---|---|
1002 | ERROR_CODE_INVALID_REQUEST | 无效的请求,请检查是否传入了posId |
1004 | ERROR_CODE_AD_IS_LOADING | 当前posId正在请求中 |
1003 | ERROR_CODE_AD_NOT_READY | 广告没有准备好 |
1005 | ERROR_CODE_NETWORK_ERROR | 网络异常 |
1006 | ERROR_CODE_UNKNOWN | 未知异常 |
1007 | ERROR_CODE_RENDER_ERROR | 渲染异常 |
1008 | ERROR_CODE_INVALID_RESPONSE | 素材无效 |
若在使用 SDK 过程中遇到问题,可参考此文档解决。
暂无
接入MAX 聚合,目前支持固价请求
xxxxxxxxxx
implementation 'com.pubeasy:adapter:1.0.1'
implementation 'com.zy:pubeasy:2.0.3'
对应的 max 版本为 12.5.0
com.pubeasy.adapter.PubeasyMediationAdapter
Class name : com.pubeasy.adapter.PubeasyMediationAdapter
#
xxxxxxxxxx
添加 topon adapter 对应的 topon 版本 为 6.3.52
implementation 'com.zy:adapter:1.0.1'
sdk的测试Id,可以拿到填充方便测试,
YV7KPQR25F34218Q banner
MJS4XLD77A95163Z native
PFT9HYS33K24879N video IV
LWB3JMT88G06754R video RV
xxxxxxxxxx
# 横幅广告 adapter
com.zy.adapter.PubeasyBannerTopOnAdapter
# 插屏广告 adapter
com.zy.adapter.PubeasyIVTopOnAdapter
# 自定义原生广告 adapter
com.zy.adapter.PubeasyNativeTPAdapter
# 激励视频 adapter
com.zy.adapter.PubeasyRewardAdTopOnAdapter
头部竞价选择实时竞价
参数
xxxxxxxxxx
{
"pubeasy_unit_id": "PP7433Z65FCF4B1E",
"pubeasy_width": 320,
"pubeasy_height": 160
}
RV 和 IV 只需要 unit_id 这个参数就可以。广告位找 Pubeasy 运营申请
Banner 和 Native 广告 需要额外填入 pubeasy_width pubeasy_height两个参数。同样是找Pubeasy申请